<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      var obj = {
        a: 10,
        b: 'abc',
        arr: ['嬲', '嫐'],
        info: {
          address: '航头'
        }
      }
      var obj2 = {}
      function deepClone(newobj, oldobj) {
        for (var k in oldobj) {
          //   newobj[k] = oldobj[k] // 此处不能直接赋值操作
          //   console.log(typeof oldobj[k])
          // 应该根据数据类型的不同实现数据的拷贝 typeof检测能力有限, 使用instanceof来检测数据类型
          var item = oldobj[k] // 将数据源中的值保存在一个变量中, 根据值的数据类型不同,做处理
         if (item.constructor == Array) { // 判断是否是数组
            // 判断是否是数组
            newobj[k] = []
            // 递归
            deepClone(newobj[k], item)
            // } else if (item instanceof Object) { // 判断是否是对象
          } else if (item.constructor == Object) {
            // 判断是否是对象
            newobj[k] = {}
            deepClone(newobj[k], item)
          } else {
            // 如果是基本数据类型直接赋值
            newobj[k] = item
          }
        }
      }
      //   调用深拷贝的函数
      deepClone(obj2, obj)
      obj2.arr[0] = '123'
      console.log(obj)
      console.log(obj2)
    </script>
  </body>
</html>
